Préambule : nous avons commencé par faire un rappel sur la récursivité en ré-écrivant le comportement de factorielle au tableau et en déroulant l'algorithme à la main.

Nous rappelons qu'une fonction récursive est une fonction qui s'appelle elle-même. Chaque appel à la fonction est indépendant des autres. Le moyen le plus simple pour réussir l'écriture d'une fonction récursive est de toujours commencer par exprimer le cas simple (la solutiotin immédiate), puis d'écrire le cas récursif (la solution qui fait appel à la solution plus simple).

Ci-dessous, vous trouverez le squelette d'une fonction récursive typique.


In [1]:
if (cas simple):
    (solution immédiate)
else:
    (solution récursive,
     impliquant un cas plus simple que le problème original)


  File "<ipython-input-1-974b6aeadca3>", line 1
    if (cas simple):
                 ^
SyntaxError: invalid syntax

Exercice Robozzle : nous avons ensuite résolu l'exercice Robozzle n°656, l'objectif était de vous faire comprendre le fonctionnement de la pile d'appels récursifs. http://robozzle.com/js/play.aspx?puzzle=656


In [2]:
def fact(n):
    """
    :entrée n: int
    :pré-cond: n > 0
    :sortie f: int
    :post-cond: f = n * (n-1) * ... * 1
    """
    if n == 1:
        f = 1
    else:
        f = fact(n-1)*n
    print("--- fact({}) = {}".format(n,f))
    return f

print(fact(6))


--- fact(1) = 1
--- fact(2) = 2
--- fact(3) = 6
--- fact(4) = 24
--- fact(5) = 120
--- fact(6) = 720
720

Vous cherchez d'autres idées pour vous entraîner à la récursivité ? Proposez donc l'algorithme de puissance, celui de Fibonacci ou encore le triangle de Pascal en récursif.


In [ ]: